.. _cemIxArcPToStart: cemIxArcPToStart ================ ---------------- SYNOPSIS -------- .. code-block:: none VT_I4 cemIxArcPToStart( VT_I4 MapIndex, VT_R8 XCent, VT_R8 YCent, VT_R8 XEndPos, VT_R8 YEndPos, VT_I4 Direction ) DESCRIPTION ----------- - 중심 좌표와 종점 좌표를 매개변수로 하여 원호 보간 이송을 수행합니다. 이때 각 좌표는 절대 좌표로 표현됩니다. - 모션을 시작시킨 후에 바로 반환됩니다. - 원호 보간은 임의의 두 축에 대해서 적용됩니다. 아래 설명에서는 맵핑된 두 축을 X, Y 축으로간주하여 설명합니다. 여기서 X 축이라 함은 맵핑된 두 축 중에서 축 번호가 낮은 축을 의미하며 Y 축은 축 번호가 높은 축을 의미합니다. 예를 들어 Z 축과 U 축이 맵핑된 두 축이라면 Z 축이 X 축에 해당하며 U 축이 Y 축에 해당합니다. PARAMETER --------- - MapIndex : 맵 번호(Map index). 이 맵 번호를 사용하기 전에 먼저 cemIxMapAxes 함수를 통하여. 해당 맵번호에 유효한 축들이 맵핑 되어 있어야 합니다. - XCent : 중심점의 X 축 절대 좌표 값을 설정합니다. - YCent : 중심점의 Y 축 절대 좌표 값을 설정합니다. - XEndPos : 원호 보간 이송을 완료할 목표 지점(End point)의 X 축 절대 좌표 값을 설정합니다. - YEndPos : 원호 보간 이송을 완료할 목표 지점(End point)의 Y 축 절대 좌표 값을 설정합니다. - Direction : 회전 방향을 설정합니다. +----------------+-----------------------------+ | Value | Meaning | +================+=============================+ | 0 (cemARC_CW) | 시계 방향(CW)으로 회전 | +----------------+-----------------------------+ | 1 (cemARC_CCW) | 반 시계 방향(CCW)으로 회전. | +----------------+-----------------------------+ RETURN VALUE ------------ +----------------+--------------------------------------------------------+ | Value | Meaning | +================+========================================================+ | 음수 | 수행 실패. 자세한 내용은 ‘에러처리’ 편을 참고합니다. | +----------------+--------------------------------------------------------+ | 0 (ceERR_NONE) | 수행 성공. | +----------------+--------------------------------------------------------+ .. note:: cemIxArcPToStart 함수를 사용하는 경우에는 cemIxIsDone 함수나 cemIxWaitDone 함수를 사용하여 모션의 완료를 확인할 수 있습니다. Example ------- .. code-block:: cpp :linenos: C/C++ #include “ceSDK.h” #include “ceSDKDef.h” long nIxMap = 0; // 보간 맵 설정 long nNodeID = 1; // 해당 원격 노드 ID void OnSetIxConfig () { // 0 번 축과 1 번 축을 보간 맵으로 설정합니다. cemIxMapAxes ( nIxMap, nNodeID, cemX1_MASK | cemY1_MASK, 0 ); //각 축의 속도를 설정합니다. cemCfgSpeedPattern_Set ( cemX1, cemSMODE_T, 1000, 5000, 5000 ); cemCfgSpeedPattern_Set ( cemY1, cemSMODE_T, 1000, 5000, 5000 ); } void OnIxArcPTo_Move () { // 맵에 포함된 축의 속도 비율을 설정합니다. cemIxSpeedPattern_Set ( nIxMap, CE_FALSE, cemSMODE_T, 100, 70, 70 ); double fPosList[2] = {0.0f, 0.0f}; // P1 에서 P2 로 이동합니다. fPosList[0] = 500; fPosList[1] = -1000; cemIxLineTo ( nIxMap, fPosList, CE_FALSE ); // P2 에서 P3 로 이송합니다. cemIxArcPTo ( nIxMap, 500, -500, 1000, -500, cemARC_CCW, CE_FALSE ); // P3 에서 P4 로 이송합니다. fPosList[0] = 1000; fPosList[1] = 500; cemIxLineTo ( nIxMap, fPosList, CE_FALSE ); // P4 에서 P5 로 이송합니다. cemIxArcPTo( nIxMap, 500, 500, 500, 1000, cemARC_CCW, CE_FALSE ); // P5 에서 P6 로 이송합니다. fPosList[0] = -500; fPosList[1] = 1000; cemIxLineTo ( nIxMap, fPosList, CE_FALSE ); // P6 에서 P7 로 이송합니다. cemIxArcPTo ( nIxMap, -500, 500, -1000, 500, cemARC_CCW, CE_FALSE ); // P7 에서 P8 로 이송합니다. fPosList[0] = -1000; fPosList[1] = -500; cemIxLineTo ( nIxMap, fPosList, CE_FALSE ); // P8 에서 P1 로 이송합니다. cemIxArcPTo ( nIxMap, -500, -500, -500, -1000, cemARC_CCW, CE_FALSE ); }